/**
 * 用户状态管理
 */
import { reactive } from 'vue';
import { userApi } from '@/common/api/api.js';

// 创建响应式用户状态
const userState = reactive({
  // 用户信息
  userInfo: null,
  // 登录状态
  isLoggedIn: false,
  // 登录凭证
  token: '',
});

// 用户状态方法
const userMethods = {
  // 初始化用户状态
  initUserState() {
    try {
      // 从本地存储读取用户信息
      const userInfo = uni.getStorageSync('userInfo');
      const token = uni.getStorageSync('token');
      
      if (userInfo && token) {
        userState.userInfo = JSON.parse(userInfo);
        userState.token = token;
        userState.isLoggedIn = true;
      }
    } catch (e) {
      console.error('初始化用户状态失败', e);
      userMethods.logout();
    }
  },
  
  // 设置用户信息
  setUserInfo(userInfo) {
    userState.userInfo = userInfo;
    
    try {
      uni.setStorageSync('userInfo', JSON.stringify(userInfo));
    } catch (e) {
      console.error('保存用户信息失败', e);
    }
  },
  
  // 设置token
  setToken(token) {
    userState.token = token;
    userState.isLoggedIn = !!token;
    
    try {
      uni.setStorageSync('token', token);
    } catch (e) {
      console.error('保存token失败', e);
    }
  },
  
  // 用户登录
  async login(code) {
    try {
      const res = await userApi.login({ code });
      
      if (res.code === 0 && res.data) {
        userMethods.setUserInfo(res.data.userInfo);
        userMethods.setToken(res.data.token);
        return true;
      }
      
      return false;
    } catch (e) {
      console.error('登录失败', e);
      return false;
    }
  },
  
  // 加载用户信息
  async loadUserInfo() {
    try {
      if (!userState.isLoggedIn) return false;
      
      const res = await userApi.getUserInfo();
      
      if (res.code === 0 && res.data) {
        userMethods.setUserInfo(res.data);
        return true;
      }
      
      return false;
    } catch (e) {
      console.error('加载用户信息失败', e);
      return false;
    }
  },
  
  // 登出
  logout() {
    userState.userInfo = null;
    userState.token = '';
    userState.isLoggedIn = false;
    
    try {
      uni.removeStorageSync('userInfo');
      uni.removeStorageSync('token');
    } catch (e) {
      console.error('清除用户信息失败', e);
    }
  }
};

// 导出用户状态和方法
export default {
  state: userState,
  ...userMethods
}; 